﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using NUnit.Framework;
using vudu.Logica.Clases;
using vudu.Datos.SqlServer;
using vudu.ClasesDominio;

namespace vudu.Pruebas
{
    [TestFixture]
    public class PruebaEnlaceDeDatosPensum
    {


        [TestCase]

         [Test]
        public void PruebaConsultarPensumActivo()
        {
            SqlServerPensum miServerPensum = new SqlServerPensum();
            //Se devuelve el id del pensum activo actualmente de la escuela seleccionada
            Pensum activo = new Pensum();
            activo = miServerPensum.ConsultarPensumActivo(1);
            // Se valida que hay un pensum en el sistema      
            Assert.IsNotNull(activo.IdPensum);
            //Se verifica que el pensum activo es el del id 4
            Assert.AreEqual(activo.IdPensum, 4);
        
        }
         [Test]
        public void PruebaConsultarPrelacionMateria() 
        {
            SqlServerPensum miServerPensum = new SqlServerPensum();
            //Se crea un objeto Pensum para llamar la consulta del metodo de consultar en la BD
            Pensum miPensum = new Pensum();    
            //Se crea una lista de materias para guardar las prelaciones
            List<Materia> misPrelaciones = new List<Materia>();
            misPrelaciones = miServerPensum.materiasNecesarias(4, 22);
            Assert.AreEqual(misPrelaciones[0].Nombre,"Cálculo II");

        }
         [Test]
        public void PruebaInsertarPensum()
        {
            SqlServerPensum miServerPensum = new SqlServerPensum();
            // instanciamos 2 objetos del tipo Materia
            Materia materia1 = new Materia();
            materia1.Codigo = 1;
            materia1.Nombre ="Desarrollo del Software";

            Materia materia2 = new Materia();
            materia2.Codigo = 2;
            materia2.Nombre = "Sistemas Distribuidos";

            // llenamos la lista 
            // Instancioamos un Objeto del tipo "Prelacion"
            Prelacion prelacion1 = new Prelacion();
            // Le asignamos al objeto prelacion1 el objeto materia1 del tipo "Materia"
            prelacion1.MiMateriaPensum = materia1;
            // le asignamos al objeto prelacion1 el semestre "1"
            prelacion1.SemestreMateriaPensum = 1;
            // le asignamos al bojeto prelacion1 los creditos "2"
            prelacion1.CreditoMateriaPensum = 2;
            // Instancioamos un Objeto del tipo "Prelacion"
            Prelacion prelacion2 = new Prelacion();
            // Le asignamos al objeto prelacion1 el objeto materia2 del tipo "Materia"
            prelacion2.MiMateriaPensum = materia2;
            // le asignamos al objeto prelacion1 el semestre "2"
            prelacion2.SemestreMateriaPensum = 2;
            // le asignamos al bojeto prelacion2 los creditos "3"
            prelacion2.CreditoMateriaPensum = 3;
            // Inserto en la lista Prelaciones el objeto materia1
            // por consiguiente el objeto materia1 va ser la prelacion del objeto materia2
            prelacion2.Prelaciones.Add(materia1); 
            string fechaReco = "18/11/2011";
            DateTime fechaI = new DateTime();
            fechaI = DateTime.Parse(fechaReco);
            string fechaReco1 = "01/03/2012";
            DateTime fechaF = new DateTime();
            fechaF = DateTime.Parse(fechaReco1);
            Pensum miPensum = new Pensum(fechaI, fechaF, "DESACTIVADO", 200);
            miPensum.ListaPrelaciones = new List<Prelacion>();
            // Insertamos los dos objetos del tipo "Prelacion" en la lista de Prelaciones en la clase Pensum
            miPensum.ListaPrelaciones.Add(prelacion1);
            miPensum.ListaPrelaciones.Add(prelacion2);
            // realizamos la prueba para verificar si efectivamente insertar el pesum en la Base de datos
            // si devuelve "True" la prueba pasa, sino si devuelve "False"
            //Assert.IsTrue(miServerPensum.insertarPensum(miPensum,1));
        
        }
         [Test]
        public void PruebaDesactivarPensum()
        {
            //Se crea un objeto Pensum para desactivar en Pensum en la BD
            SqlServerPensum miServerPensum = new SqlServerPensum();
            Pensum miPensum = new Pensum();
            miPensum.IdPensum = 4;
            bool estatusDesactivacion = miServerPensum.DesactivarPensum(miPensum);
            Assert.IsTrue(estatusDesactivacion);
            miPensum = miServerPensum.DevolverPensum(4);
            Assert.AreEqual(miPensum.StatusPensum,"DESACTIVADO");
        }

         [Test]
         public void PruebaEliminarMateriaPensum()
         {
             SqlServerPensum miServerPensum = new SqlServerPensum();
             Prelacion miPrelacion = new Prelacion();
             miPrelacion = null;
             bool estatusEliminacion = false;
             estatusEliminacion = miServerPensum.eliminarMateriaPensum(50,4);
             Assert.IsTrue(estatusEliminacion);
             miPrelacion = miServerPensum.traerDatosMateriaPensum(56,4);
             Assert.IsNull(miPrelacion);
         }

    }
}